<?php

class CotizadorAna {
  var $__uriMetodoConsulta;
  var $strFuncion;
  var $arrParametros;
  
  /**
   * @var WSSESoapClient
   */
  var $__oResCliente;
  
  /**
   * @param DatosCotizacionQualitas $oDatoCot
   */
  static function PolizaDesdeObjetoQualitas($oDatoCot, $intPaquete) {
    $strFuncion = "Transaccion";
    $oCot       = new CotizadorExtendido();
    $oCot2      = new CotizadorExtendido();
    $arrDC = unserialize($oDatoCot->txtArrInfoExtraPoliza);
//    $arrP = CotizadorAna::ParseXMLPoliza()
//    prent_r($oDatoCot);
//    prent_r($arrDC);
    
    $oCot->__strXMLActual      = CotizacionAna::ObtenerXMLPeticion($oDatoCot, $intPaquete, "E");
//    die($oCot->__strXMLActual);
    
    $oCot->__uriMetodoConsulta = "https://server.anaseguros.com.mx/ananetws/service.asmx";

    $oDatoCot->txtArrInfoExtraPoliza = serialize($_POST["datos"]);
    $oDatoCot->txtXMLPolizaEnvio     = $oCot->__strXMLActual;
    $oDatoCot->GuardarObjeto();
    
//*
    $oCot->ObtenerResultadoFuncionWebService($strFuncion, $arrParamsFunc);
    
    $strRes = $oCot->__oResCliente->__last_response;
    $strRes = substr($strRes, strpos($strRes, "TransaccionResult") + strlen("TransaccionResult") + 1);
    $strRes = substr($strRes, 0, strpos($strRes, "TransaccionResult") - 2);
    $strRes = str_replace("&gt;", ">", $strRes);
    $strRes = str_replace("&lt;", "<", $strRes);
// */ global $strGPath; $strRes = file_get_contents("$strGPath/scripts/ejemplo.xml");
    
//    prent_r($oCot);
    
    $oCotQua->strXMLRespuesta = $strRes;
    $arrParseado = CotizadorAna::ParseXMLPoliza($strRes);
    
    $oDatoCot->txtXMLPolizaRespuesta = $strRes;
    $oDatoCot->txtArrInfoPoliza      = serialize($arrParseado);
    $oDatoCot->GuardarObjeto();
    if($arrParseado["error"]) {
      $oDatoCot->strUrlPDFPoliza = "Error: {$arrParseado["error"]}";
      $oDatoCot->GuardarObjeto();
      return $oDatoCot->strUrlPDFPoliza;
    }
    
    $strFuncion = "Transaccion";
    $oCot2->__strXMLActual = CotizacionAna::ObtenerXMLImpresion($arrParseado["poliza"]["id"]);

    $oCot2->__uriMetodoConsulta = "https://server.anaseguros.com.mx/ananetws/service.asmx";
    $oCot2->ObtenerResultadoFuncionWebService($strFuncion, $arrParamsFunc);
    
    $strXMLRes = $oCot2->__oResCliente->__last_response;
    $strXMLRes = substr($strXMLRes, strpos($strXMLRes, "<TransaccionResult"));
    $strXMLRes = substr($strXMLRes, strpos($strXMLRes, ">") + 1);
    $strXMLRes = substr($strXMLRes, 0, strpos($strXMLRes, "</TransaccionResult"));
    $strXMLRes = str_replace("&gt;", ">", $strXMLRes);
    $strXMLRes = str_replace("&lt;", "<", $strXMLRes);
    
    $arrValoresImp = CotizadorAna::ParseXMLImpresion($strXMLRes);
    
    $oDatoCot->txtXMLImpresionEnvio     = $oCot2->__strXMLActual;
    $oDatoCot->txtXMLImpresionRespuesta = $oCot2->__oResCliente->__last_response;
    $oDatoCot->txtArrInfoImpresion      = serialize($arrValoresImp);
    $oDatoCot->strUrlPDFPoliza          = $strXMLRes;
    $oDatoCot->GuardarObjeto();
    
    return $strXMLRes;
  }
  
  function ObtenerCatalogoEstadosANA() {
    // 423
    // 04193
    // PICK7756
    $this->__uriMetodoConsulta = "https://server.anaseguros.com.mx/ananetws/service.asmx";
    $strFuncion    = "EDOS";
    $arrParametros = array("Negocio" => "423", "Usuario" => "04193", "Clave" => "PICK7756");
    $this->__oResCliente = $this->ObtenerResultadoFuncionWebService($strFuncion, $arrParametros);
    
    return $this->__oResCliente;
  }
  
  function Parse_ObtenerCatalogoEstadosANA() {
    $arrRes        = array();
    
    $strXMLRes = $this->__oResCliente->EDOSResult;
    $p = xml_parser_create();
    xml_parse_into_struct($p, $strXMLRes, $arrValues, $arrIndex);
    
    foreach($arrValues as $arrInfoEstado) {
      if($arrInfoEstado["tag"] == "ESTADO") {
        $arrRes[$arrInfoEstado["attributes"]["ID"]] = $arrInfoEstado["value"];
      }
    }
    
    return $arrRes;
  }
  
  function ObtenerCatalogoMunicipiosANA($intIdEdo) {
    // 423
    // 04193
    // PICK7756
    $this->__uriMetodoConsulta = "https://server.anaseguros.com.mx/ananetws/service.asmx";
    $strFuncion    = "DelMun";
    $arrParametros = array("Negocio" => "423", "Usuario" => "04193", "Clave" => "PICK7756", "Estado" => $intIdEdo);
    $this->__oResCliente = $this->ObtenerResultadoFuncionWebService($strFuncion, $arrParametros);
    
    return $this->__oResCliente;
  }
  
  function Parse_ObtenerCatalogoMunicipiosANA() {
    $arrRes        = array();
    
    $strXMLRes = $this->__oResCliente->DelMunResult;
    $p = xml_parser_create();
    xml_parse_into_struct($p, $strXMLRes, $arrValues, $arrIndex);
    
    foreach($arrValues as $arrInfoEstado) {
      if($arrInfoEstado["tag"] == "DELMUN") {
        $arrRes[$arrInfoEstado["attributes"]["ID"]] = $arrInfoEstado["value"];
      }
    }
    
    return $arrRes;
  }
  
  function ObtenerCatalogoCPANA($intIdEdo, $intIdMun) {
    // 423
    // 04193
    // PICK7756
    $this->__uriMetodoConsulta = "https://server.anaseguros.com.mx/ananetws/service.asmx";
    $strFuncion    = "CodigoPostal";
    $arrParametros = array("Negocio" => "423", "Usuario" => "04193", "Clave" => "PICK7756", "Estado" => $intIdEdo, "Ciudad" => $intIdMun);
    $this->__oResCliente = $this->ObtenerResultadoFuncionWebService($strFuncion, $arrParametros);
    
    return $this->__oResCliente;
  }
  
  function Parse_ObtenerCatalogoCPANA() {
    $arrRes        = array();
    $strXMLRes = $this->__oResCliente->CodigoPostalResult;
    $p = xml_parser_create();
    xml_parse_into_struct($p, $strXMLRes, $arrValues, $arrIndex);
    
    foreach($arrValues as $arrInfoEstado) {
      if($arrInfoEstado["tag"] == "CP") {
        $arrRes[$arrInfoEstado["attributes"]["ID"]] = $arrInfoEstado["value"];
      }
    }
    
    return $arrRes;
  }
  
  /**
   * 
   * @param CotizacionQualitas $oCotizacion
   */
  static function ParseXMLImpresion($strXML) {
    $p = xml_parser_create();
    xml_parse_into_struct($p, $strXML, $arrValues, $arrIndex);
    xml_parser_free($p);
    
    // Buscar los valores de la cotizacion, poliza, etc
    foreach($arrValues as $arrLinea) {
      if($arrLinea["tag"] == "POLIZA") {
        $arrCoberturas["datos"]["id"    ] = $arrLinea["attributes"]["ID"    ];
        $arrCoberturas["datos"]["endoso"] = $arrLinea["attributes"]["ENDOSO"];
        $arrCoberturas["datos"]["inciso"] = $arrLinea["attributes"]["INCISO"];
        $arrCoberturas["datos"]["link"  ] = $arrLinea["attributes"]["LINK"  ];
        
        break;
      }
    }
    
    // Buscar los errores
    foreach($arrValues as $arrLinea) {
      if($arrLinea["tag"] == "ERROR") {
        $arrCoberturas["error"] = $arrLinea["value"];
        
        break;
      }
    }
    
    return $arrCoberturas;
  }
  
  static function ParseXMLPoliza($strXML) {
    $p = xml_parser_create();
    xml_parse_into_struct($p, $strXML, $arrValues, $arrIndex);
    xml_parser_free($p);
    
    // Buscar los valores de la cotizacion, poliza, etc
    foreach($arrValues as $arrLinea) {
      if($arrLinea["tag"] == "TRANSACCION") {
        $arrCoberturas["datos"]["version"     ] = $arrLinea["attributes"]["VERSION"    ];
        $arrCoberturas["datos"]["cotizacion"  ] = $arrLinea["attributes"]["COTIZACION" ];
        $arrCoberturas["datos"]["negocio"     ] = $arrLinea["attributes"]["NEGOCIO"    ];
        $arrCoberturas["datos"]["tipo_negocio"] = $arrLinea["attributes"]["TIPONEGOCIO"];
        $arrCoberturas["datos"]["id_cot"      ] = $arrLinea["attributes"]["IDCOT"      ];
        
        break;
      }
    }
    
    foreach($arrValues as $arrLinea) {
      if($arrLinea["tag"] == "VEHICULO") {
        foreach($arrLinea["attributes"] as $strId => $strVal) {
          $arrCoberturas["vehiculo"][strtolower($strId)] = $strVal;
        }
        
        break;
      }
    }
    
    foreach($arrValues as $arrLinea) {
      if($arrLinea["tag"] == "POLIZA") {
        foreach($arrLinea["attributes"] as $strId => $strVal) {
          $arrCoberturas["poliza"][strtolower($strId)] = $strVal;
        }
        
        break;
      }
    }
    
    foreach($arrValues as $arrLinea) {
      if($arrLinea["tag"] == "PRIMA") {
        foreach($arrLinea["attributes"] as $strId => $strVal) {
          $arrCoberturas["primas"][strtolower($strId)] = $strVal;
        }
        
        break;
      }
    }
    
    foreach($arrValues as $arrLinea) {
      if($arrLinea["tag"] == "COBERTURA") {
        unset($arrCoberturaTmp);
        foreach($arrLinea["attributes"] as $strId => $strVal) {
          $arrCoberturaTmp[strtolower($strId)] = $strVal;
        }
        
        $arrCoberturas["coberturas"][] = $arrCoberturaTmp;
      }
      
      if($arrLinea["tag"] == "RECIBO") {
        unset($arrCoberturaTmp);
        foreach($arrLinea["attributes"] as $strId => $strVal) {
          $arrCoberturaTmp[strtolower($strId)] = $strVal;
        }
        
        $arrCoberturas["recibos"][] = $arrCoberturaTmp;
      }
    }
    
    foreach($arrValues as $arrLinea) {
      if($arrLinea["tag"] == "ERROR") {
        $arrCoberturas["error"] = $arrLinea["value"];
        break;
      }
    }
    
    return $arrCoberturas;
  }
  
  
  /**
   * @param DatosCotizacionQualitas $oDatoCot
   */
  static function CotizarDesdeObjetoQualitas($oDatoCot, $intPaquete) {
    $strFuncion = "Transaccion";
    $oCot       = new CotizadorExtendido();
    $oCotAna    = new CotizacionAna     ();
    
    $oCotAna->strXMLEnvio      = CotizacionAna::ObtenerXMLPeticion($oDatoCot, $intPaquete);
//    die($oCotAna->strXMLEnvio);
    
    $oCot->__uriMetodoConsulta = "https://server.anaseguros.com.mx/ananetws/service.asmx";
    $oCot->__strXMLActual      = $oCotAna->strXMLEnvio;

    $oCot->ObtenerResultadoFuncionWebService($strFuncion, $arrParamsFunc);
//    die($oCot->__oResCliente->__last_response);
    // Para obtener la respuesta de por mientras
//    global $strGPath;
//    $oCot->__oResCliente->__last_response = file_get_contents("$strGPath/scripts/ejemplo_ana.xml");
            
    $strRes = $oCot->__oResCliente->__last_response;
    
    $strRes = substr($strRes, strpos($strRes, "transacciones") - 4);
    $strRes = substr($strRes, 0, strpos($strRes, "/transacciones") + strlen("/transacciones>") + 3);
    $strRes = str_replace("&gt;", ">", $strRes);
    $strRes = str_replace("&lt;", "<", $strRes);
    
    $strRes = '<?xml version="1.0" encoding="utf-8"?>' . $strRes;
    $oCotAna->strXMLRespuesta = $strRes;
    
    $arrParseado = CotizadorAna::ParseXML($strRes);
    $oCotAna->strArrDatos = serialize($arrParseado);
    
    $oCotAna->intIdDatoCotizacion = $oDatoCot->intIdDatoCotizacion;
    $oCotAna->intTipo         = $intPaquete;
    
    $oCotAna->strNoCotizacion = $arrParseado["datos" ]["cotizacion"];

    $oCotAna->fltPrimaNeta    = $arrParseado["primas"]["primaneta" ];
    $oCotAna->fltPrimaTotal   = $arrParseado["primas"]["primatotal"];
    
    $oCotAna->GuardarObjeto(true, true);
    
    return $oCotAna;
  }
  
  /**
   * 
   * @param CotizacionQualitas $oCotizacion
   */
  static function ParseXML($strXML) {
    $p = xml_parser_create();
    xml_parse_into_struct($p, $strXML, $arrValues, $arrIndex);
    xml_parser_free($p);
    
    // Buscar los valores de la cotizacion, poliza, etc
    foreach($arrValues as $arrLinea) {
      if($arrLinea["tag"] == "TRANSACCION") {
        $arrCoberturas["datos"]["version"     ] = $arrLinea["attributes"]["VERSION"    ];
        $arrCoberturas["datos"]["cotizacion"  ] = $arrLinea["attributes"]["COTIZACION" ];
        $arrCoberturas["datos"]["negocio"     ] = $arrLinea["attributes"]["NEGOCIO"    ];
        $arrCoberturas["datos"]["tipo_negocio"] = $arrLinea["attributes"]["TIPONEGOCIO"];
        $arrCoberturas["datos"]["id_cot"      ] = $arrLinea["attributes"]["IDCOT"      ];
        
        break;
      }
    }
    
    foreach($arrValues as $arrLinea) {
      if($arrLinea["tag"] == "VEHICULO") {
        foreach($arrLinea["attributes"] as $strId => $strVal) {
          $arrCoberturas["vehiculo"][strtolower($strId)] = $strVal;
        }
        
        break;
      }
    }
    
    foreach($arrValues as $arrLinea) {
      if($arrLinea["tag"] == "POLIZA") {
        foreach($arrLinea["attributes"] as $strId => $strVal) {
          $arrCoberturas["poliza"][strtolower($strId)] = $strVal;
        }
        
        break;
      }
    }
    
    foreach($arrValues as $arrLinea) {
      if($arrLinea["tag"] == "PRIMA") {
        foreach($arrLinea["attributes"] as $strId => $strVal) {
          $arrCoberturas["primas"][strtolower($strId)] = $strVal;
        }
        
        break;
      }
    }
    
    foreach($arrValues as $arrLinea) {
      if($arrLinea["tag"] == "COBERTURA") {
        unset($arrCoberturaTmp);
        foreach($arrLinea["attributes"] as $strId => $strVal) {
          $arrCoberturaTmp[strtolower($strId)] = $strVal;
        }
        
        $arrCoberturas["coberturas"][] = $arrCoberturaTmp;
      }
      
      if($arrLinea["tag"] == "RECIBO") {
        unset($arrCoberturaTmp);
        foreach($arrLinea["attributes"] as $strId => $strVal) {
          $arrCoberturaTmp[strtolower($strId)] = $strVal;
        }
        
        $arrCoberturas["recibos"][] = $arrCoberturaTmp;
      }
    }
    
    return $arrCoberturas;
  }
  
  function ObtenerResultadoFuncionWebService($strFuncion, $arrParametros = "") {
    $this->strFuncion    = $strFuncion   ;
    $this->arrParametros = $arrParametros;
    
    $arrHeaders["trace"       ] = 1;
    $arrHeaders["soap_version"] = SOAP_1_1;
    $arrHeaders["connection_timeout"] = 15;
    
    $this->__oResCliente = new WSSESoapClient($this->__uriMetodoConsulta . "?WSDL", $arrHeaders);
    
    $this->__oResCliente->setFunctionParams  ($arrParametros, $strFuncion, $this->__uriMetodoConsulta);
    eval('$rsResult = $this->__oResCliente->' . $strFuncion . '($arrParametros);');
    
    return $rsResult;
  }
  
  function ObtenerCatalogoMarcasQualitas() {
    $strFuncion    = "listaMarcas";
    $arrParametros = array("cUsuario" => "LINEA", "cTarifa" => "LINEA");
    
    $this->__uriMetodoConsulta = "http://qbcenter.qualitas.com.mx/wsTarifa/wsTarifa.asmx";
    
    $this->ObtenerResultadoFuncionWebService($strFuncion, $arrParametros);
    
    
    $strXMLRes = $this->__oResCliente->__last_response;
    $strXMLRes = substr($strXMLRes, strpos($strXMLRes, "<datos"));
    $strXMLRes = substr($strXMLRes, strpos($strXMLRes, ">") + 1);
    $strXMLRes = substr($strXMLRes, 0, strpos($strXMLRes, "</datos"));
    
    $arrRes = Variables::ObtenerCadenasDelimitadas($strXMLRes, "<Elemento>", "</Elemento>");
    
    foreach($arrRes as $strLinea) {
      $strLinea = str_replace("<cMarca>"      , "", $strLinea);
      $strLinea = str_replace("</cMarcaLarga>", "", $strLinea);
      $arrT = explode("</cMarca><cMarcaLarga>", $strLinea);
      $arrRes2[] = array("clave" => $arrT[0], "nombre" => $arrT[1]);
    }
    
    return $arrRes2;
  }
  
  function ObtenerCatalogoModelosQualitas($strCveMarca, $strModelo) {
    $strFuncion    = "listaTarifas";
//    $arrParametros = array("cUsuario" => "LINEA", "cTarifa" => "LINEA", "cMarca" => "VW", "cTipo" => "POLO");
    $arrParametros = array("cUsuario" => "LINEA", "cTarifa" => "LINEA", "cMarca" => $strCveMarca, "cModelo" => $strModelo);
//    $arrParametros = array("cUsuario" => "LINEA", "cTarifa" => "LINEA");
    
    $this->__uriMetodoConsulta = "http://qbcenter.qualitas.com.mx/wsTarifa/wsTarifa.asmx";
    
    $this->ObtenerResultadoFuncionWebService($strFuncion, $arrParametros);
    
    $strXMLRes = $this->__oResCliente->__last_response;
    $strXMLRes = substr($strXMLRes, strpos($strXMLRes, "<datos"));
    $strXMLRes = substr($strXMLRes, strpos($strXMLRes, ">") + 1);
    $strXMLRes = substr($strXMLRes, 0, strpos($strXMLRes, "</datos"));
    
    $arrRes = Variables::ObtenerCadenasDelimitadas($strXMLRes, "<Elemento>", "</Elemento>");
    
    foreach($arrRes as $strLinea) {
      $strLinea = str_replace("<cTarifa>"     , "", $strLinea);
      $strLinea = str_replace("</cMarcaLarga>", "", $strLinea);
      
      $strLinea = str_replace("</cTarifa><cMarca>"         , ",||,", $strLinea);
      $strLinea = str_replace("</cMarca><cTipo>"           , ",||,", $strLinea);
      $strLinea = str_replace("</cTipo><cVersion>"         , ",||,", $strLinea);
      $strLinea = str_replace("</cVersion><cModelo>"       , ",||,", $strLinea);
      $strLinea = str_replace("</cModelo><CAMIS>"          , ",||,", $strLinea);
      $strLinea = str_replace("</CAMIS><cCategoria>"       , ",||,", $strLinea);
      $strLinea = str_replace("</cCategoria><cTransmision>", ",||,", $strLinea);
      $strLinea = str_replace("</cTransmision><cOcupantes>", ",||,", $strLinea);
      $strLinea = str_replace("</cOcupantes><nV1>"         , ",||,", $strLinea);
      $strLinea = str_replace("</nV1><nV2>"                , ",||,", $strLinea);
      $strLinea = str_replace("</nV2><cNvaAMIS>"           , ",||,", $strLinea);
      $strLinea = str_replace("</cNvaAMIS><cMarcaLarga>"   , ",||,", $strLinea);
      
      $arrT = explode(",||,", $strLinea);
      $arrRes2[] = array(
        "tarifa"       => $arrT[ 0],
        "marca"        => $arrT[ 1],
        "tipo"         => $arrT[ 2],
        "version"      => $arrT[ 3],
        "modelo"       => $arrT[ 4],
        "amis"         => $arrT[ 5],
        "categoria"    => $arrT[ 6],
        "transmision"  => $arrT[ 7],
        "ocupantes"    => $arrT[ 8],
        "nv1"          => $arrT[ 9],
        "nv2"          => $arrT[10],
        "nva_amis"     => $arrT[11],
        "nombre_marca" => $arrT[12]
      );
    }
    
    return $arrRes2;
  }
}

?>
